/**
 * 
 * Modelo
 */

var Registro = function(){ 
	this.nombre; //es el nombre de contacto
	this.telefonos = new Array();//= arrayTelefonos;
	this.direcciones= new Array();// = arrayDirecciones;
};
var Registro = function(n,ds,ts){ 
	this.nombre = n; //es el nombre de contacto
	this.telefonos = ts;//= arrayTelefonos;
	this.direcciones= ds;// = arrayDirecciones;
};

Registro.prototype.getNombre=function(){
	return this.nombre;
};

Registro.prototype.addTelefono=function(id, numero, prefijo){
	this.telefonos.push(new Telefono(id, numero, prefijo));
};

var Persona = function(nom, arTelefonos, arDirecciones){
	this.nombre = nom;
	this.telefonos= arTelefonos;
	this.direcciones=arDirecciones;
};

//var Persona = function(){
//	this.cumpleaños;
//};
Persona.prototype = new Registro();

var Empresa = function(n,c){
	this.nombrePersonaContacto = n;
	this.cuit=c;
};

Empresa.prototype = new Registro();


var Telefono = function(id, num, pref){ 
	this.identificador = id; //celular, etc
	this.numero= num; 
	this.prefijo=pref;
};

var Direccion = function(i,dir,c, p){ 
	this.identificador = i; //casa, oficina, sucursal n
	this.direccion= dir; 
	this.cp = c;
	this.provincia=p;
};

/**
 * Capa de persistencia ->mondodb "puro"
 */




// aca va el main
var marcia = new Persona("MarciaT", 
		[ {identificador:"celular",numero:"15-63523232" }
		],
		[]
);
var seniorEquis = new Persona("SeniorEquis", 
		[ {identificador:"celular",numero:"15-5454545" }
		],
		[]
);

var senioraY = new Persona("SenioraY", 
		[ {identificador:"casa",numero:"15-5454545" }
		],
		[]
);
//console.log(marcia);
//console.log(marcia instanceof(Persona));


marcia.addTelefono("Casa", "22222222", "011");
//console.log(marcia);

module.exports = Registro;
module.exports = Empresa;
module.exports = Persona;
module.exports = Telefono;
module.exports = Direccion;


var mongo = require('mongodb'),
Server = mongo.Server,
Db = mongo.Db;

var server = new Server('localhost', 27017, {auto_reconnect: true});
var db = new Db('test', server);

var guardarPersona = function(persona, db){
	db.open(function(err, db) {
	    db.collection('test', function(err, collection) {      
	    	  collection.insert(persona);
	    	  db.close();	
	    });
	});
};


var buscarPersonaPorNombre = function(unNombre, db){
	db.open(function(err, db) {
		db.collection('test', function(err, collection) { 
			collection.findOne({"nombre":unNombre}, function(err, doc) {      
				console.log(doc);
				db.close();
			});
		});
	});
};


var buscarPersonasConCelular = function(db){
	db.open(function(err, db) {
		db.collection('test', function(err, collection) { 
			collection.find({"telefonos.identificador":"celular"}).toArray(function(err, docs){
				console.log(docs);
			    db.close();
			});
		});
	});
};


var buscarPorVariosNombres = function(nombre1, nombre2, db) {
	db.open(function(err, db) {
		db.collection('test', function(err, collection) { 
			collection.find({$or:[{"nombre":nombre1},{"nombre":nombre2}]}).toArray(function(err, docs){
				console.log(docs);
			    db.close();
			});
		});
	});
}

var cambiarNombre = function(unNombre, nuevoNombre, db) {
	db.open(function(err, db) {
		db.collection('test', function(err, collection) { 
			collection.findAndModify(
			        {"nombre": unNombre}, // query
			        [['_id','asc']],  // sort order
			        {$set: {"nombre": nuevoNombre}}, // replacement, replaces only the field "hi"
			        {}, // options
			        function(err, object) {
			            if (err){
			                console.warn(err.message);  // returns error if no matching object found
			            }else{
			                console.dir(object);
			            }
			        });
			db.close();
		});
	});
}

//var cambiarNumeroDeTelefonoCelular = function(unNombre, unNuevoNumero, db) {
//	db.open(function(err, db) {
//		db.collection('test', function(err, collection) { 
//			collection.findOne({"nombre":unNombre}, function(err, doc) {      
//				collection.update( { _id:doc._id }, { $in: { "telefonos.identificador": "celular" }, $set: { "telefonos.numero": unNuevoNumero } } )
//				db.close();
//			});
//		});
//	});
//};

//buscarPersonasConCelular(db);
//guardarPersona(marcia);
//guardarPersona(senioraY);
//guardarPersona(seniorEquis);
//buscarPorVariosNombres("SeniorEquis","juancito",db);
//cambiarNombre("SenioraDeEquis","SenioraDeEquisP",db);
//cambiarNumeroDeTelefonoCelular("MarciaT", "1111111111",db);